package _go
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func isBalanced(root *TreeNode) bool {
	if r := dg(root);r >= 0{
		return true
	} else{
		return false
	}

}

//计算树的深度 并检查是不是asb
func dg(root *TreeNode) int{
	if root == nil { return 0}
	l := dg(root.Left)
	if l==-1 {return -1}//剪枝操作   如果左子树不是平衡树直接返回
	r := dg(root.Right)
	if r==-1 {return -1}//剪枝操作  如果右子树 不是平衡树直接返回

	//计算左右子树的高度差
	if abs(l - r) > 1 {
		return -1//子树不是平衡树
	}else{
		return max(l,r)+1
	}
}

func max(a,b int)int{
	if  a>b {
		return a
	}else{
		return b
	}
}
//abs函数很重要
func abs(x int) int {
	if x < 0 {
		return -1 * x
	}
	return x
}